package org.shj.thread.book2.chapter03;

/**
 * 多线程 Guarded Suspension 模式。 主要是 wait() 和 notifyAll() 的配合使用。
 * 当警戒条件满足时，调用 wait() 方法，这个方法会释放所获得的锁。
 * 本例中的中 RequestQueue 在 java 中的实现是 java.util.concurrent.LinkedBlockingQueue
 * 
 * @author huangjian
 *
 */
public class Main {

	public static void main(String[] args){
		RequestQueue queue = new RequestQueue();
		Thread alice = new ClientThread(queue, "Alice", 3141592L);
		Thread bobby = new ServerThread(queue, "Bobby", 271828L);
		
		alice.start();
		bobby.start();
		
		try{
			Thread.sleep(10 * 1000);
		}catch(Exception e){
			
		}
		
		//以下代码并不能中断alice和bobby两个线程，试想为什么？
		System.out.println("===== calling interrupt() ==== ");
		alice.interrupt();
		bobby.interrupt();
		// 试着调整 ClientThread 和 ServerThread 中的 try catch 的位置，看上面中断请求是否成功
	}
}
